The increasing availability of biological data, computational power, and advanced algorithms in the past decade has transformed the theoretical, academic discipline of Computational Biology into the industrial and technological field of Bioinformatics. Despite advances in general-purpose and specialized computer technology, efficient algorithm design, and commercial investment in bioinformatics technology, analysis of the volume of new data being generated by public efforts and private entities threatens to outstrip current computational resources.
GenBank is a publicly funded database at NIH containing DNA sequences collected from published biological research on various organisms. The amount of sequence in GenBank has grown since 1982 from 680,338 nucleotide base pairs (characters) in 606 sequences to 12.4 billion bases in 11.5 million sequences as of April 2001. GenBank currently is more than doubling in size every year. While this is the growth pattern of the public data, private concerns are also generating enormous amounts of sequence data. Celera Genomics, for instance, has produced at least 6× coverage of two mammalian genomes, homo sapiens and mus musculus, which must constitute at least 30–40 billion nucleotide bases. Other genomic and pharmaceutical companies are similarly producing data and performing analyses of those data.
In 1965 Gordon Moore, founder of Intel, stated what is now known as Moore's “Law”—that computers will double in speed and capacity every 18 months due to advances in semiconductor technology. This has held essentially true up to now, except that the time has decreased from 18 months to about a year. Even so, the rate of change of computer speeds and capacities is slower than the rate of increase in size of genetic databases.
Advances in algorithms have made some progress in decreasing the cost of computational analysis of genetic data. The Smith-Waterman dynamic programming algorithm, published in 1981, is the most sensitive and well-understood algorithm for comparing genetic sequences. Heuristic methods such as FASTA (1988) and BLAST (1990, 1997) were developed to make these comparisons faster, sacrificing sensitivity for speed. With current semiconductor-based sequential computational technology and the known theoretical algorithmic limitations of sequence comparison, there is little to suggest that any new order-of-magnitude improvements in speed will be made in this area which do not seriously affect the sensitivity of results.
It can be argued that sequence comparison is the single largest current use of computation in bioinformatics. The vast majority of sequence and protein classifications have been made on the basis of comparison with already characterized sequences. Higher level analyses of protein families including position-specific scoring systems, Hidden Markov Models, multiple sequence alignments, and phylogenetic analyses do not necessarily involve sequence comparison per se, but do take the results of database searches as their input.
Programs such as SSEARCH (a software implementation of Smith-Waterman contained in the FASTA package), FASTA and BLAST conform to the one query sequence, one database paradigm. This is essentially an historical artifact of the origins of these programs. In the past, the limiting factor in analysis of a new sequence was not the computation used to compare the sequence to a database, but in the extraction of the sequence itself from an organism. Comparison of a single genetic sequence to a sequence library requires an amount of computation linearly proportional to the size of the library. Computational analysis was simply a minor, final step in the process of studying the newly determined sequence.
In the new era of genomics and proteomics, advances in sequencing technology have changed this equation. Large sequences and entire genomes are becoming available from increasing numbers of organisms. Also, the identification and comparison of individual genes is beginning to give way to the elucidation of entire systems of interrelated genes and gene products common among various classes of organisms. For these reasons, speedy comparison of single sequences to databases, genomes, or proteomes, while still important, is less desirable than sensitive methods for comparison of these datasets to one another in their entirety. This implies that the size of the computations we would like to perform is effectively growing quadratically instead of linearly.
Given that the volume of sequence data is growing faster than improvements in individual computer speeds, vast improvements in the efficiency of sequence comparison algorithms are likely not forthcoming, and the desired amount of computation is growing quadratically, the only clear solution is to throw more computers at the problem. This is indeed what has happened. The Sanger Centre in the UK, a large contributor to the publicly funded Human Genome Project, operates 256 Compaq Alpha CPUs, several 12-processor Compaq Alpha machines, and a cluster of 48 Intel-based Linux boxes. Celera operates an 800–1000 CPU cluster of Compaq Alpha processors. Incyte Genomics operates a 3600 node cluster of Intel-based Linux machines. These organizations continue to upgrade existing equipment and purchase new equipment. Other genomic and pharmaceutical companies and organizations have made or are considering similar purchases. A large percentage of the time spent on these clusters is spent performing BLAST searches.
While these large-scale computational resources have made many of the contemporary advances in genomic research possible, there are significant shortcomings to this approach. The NCBI BLAST (Basic Local Alignment Search Tool) program blastall is probably the most extensively used program in the suite of BLAST programs. It performs the blastn (nucleotide query sequence vs. nucleotide subject database), blastp (amino acid sequence vs. protein subject database), blastx (translated nucleotide sequence vs. protein subject database), tblastn (amino acid sequence vs. translated nucleotide subject database), and tblastx (nucleotide query sequence vs. nucleotide subject database, both translated) algorithms. In comparing one query sequence at a time to a subject database, blastall must scan through all the data in the subject database for each query sequence. The basic BLAST algorithm is fast enough that it spends very little CPU (central processing unit) time with each subject sequence. As a result, the speed with which the algorithm can process subject data significantly exceeds the speed of even the fastest local disks, and far exceeds the speed of most network accessible disks, which are often where large datasets reside.
Thus, if one wishes to maximize the efficiency of a BLAST search, one must ensure that the entire subject dataset resides in main memory within the machine on which the search is being performed. Individual subject databases can range in size from a few thousands of bytes up to (at this writing) almost ten billion bytes (10 gigabytes (GB)). This means that, for the largest searches desired, one must populate EACH machine in a cluster with as much as 10 GB of main memory. Machines that can accommodate this much memory are typically more expensive than commodity PC hardware. Even more dramatically, the cost of the necessary RAM for these machines can often exceed the cost of the machines themselves! Multiply this cost by hundreds or thousands of machines, and it becomes clear that the expense is prohibitive for even the most well-funded organizations. Finally, the size of the genetic databases continues to grow faster than the number of gigabytes of RAM that can be purchased per dollar, even when Moore's Law is taken into account. So, the cost per machine continues to grow.
Several approaches have been taken toward this problem. In the naive method of dividing a database-to-database comparison into multiple subcomparisons, the query database is divided into multiple smaller query sub-databases. Each query sub-database is sent to a separate CPU, as well as the entire subject database, and the comparison is performed. As noted above, this method requires large amounts of RAM to efficiently compare queries to a large subject database. In addition, it also means that for each new CPU employed in the search, the amount of data that must be transferred to that CPU includes the entire subject database. As the number of CPUs employed in the search increases, the total amount of data transferred when initiating a large database-to-database comparison is effectively the number of CPUs times the size of the subject database. This typically saturates the network on which the machines reside, diminishing the usefulness of each new CPU added to the network.
To decrease the memory requirements for each CPU participating in the search, it is possible to divide the subject database into multiple smaller subject sub-databases. This, however, changes the statistical parameters of the search. The primary characteristic of BLAST searches that impinges upon the aforementioned statistical differences is the “size” of the sequence comparison space being searched. Briefly, the comparison search space size is approximately the product of the length of the query sequence multiplied by the sum of the lengths of the sequences in the subject database. Thus, the search space size for the comparison of a query sequence to an entire subject database is different (i.e., larger) than the search space size for the comparison of the same query sequence to a sub-database of that same subject database.
BLAST uses a multi-tiered set of heuristics to successively refine its search results, and the comparison search space size is one of the parameters used to “tune” each of these heuristics. At each successive step of the BLAST heuristic, a decision is made as to which matches to discard, and which matches to subject to further search and refinement. The comparison search space size directly affects the parameters used to make each of these decisions; thus, when the comparison search space size for a search is modified, the results of that search will also differ.
The blastall program does provide two parameters that can be used to attempt to correct for these statistical differences. The “−z” parameter allows the blastall user to specify the effective subject database length used to compute the comparison search space size for each query sequence/subject database comparison, regardless of the actual subject database length. The “−Y” parameter allows the user to specify the comparison search space size, regardless of the length of the query or subject sequences. When dividing a search into multiple sub-searches, these two parameters override the actual size of the search space in each sub-search, replacing the actual sub-search space size with the virtual “entire” search space size.
Unfortunately, due to bugs and anomalies in the NCBI BLAST version 2.0.14 suite of programs which is in wide use today, the use of the -z and -Y parameters does not allow the user to produce identical results with one large search and multiple smaller sub-searches. Anecdotal accounts from users of blastall suggest that it is unclear that the comparison search space size imposed upon blastall by the use of these flags consistently affects the heuristic parameters of the search. Although there is no theoretical reason why exactly identical results cannot be obtained, it is difficult to demonstrate conclusively whether use of the -z or -Y parameters allows the different searches to select or discard identical matches at each step of the search. Without detailing all known bugs and anomalies in blastall 2.0.14 here, however, it is sufficient to explain one well-understood anomaly to effectively demonstrate that the results will not be identical.
The NCBI BLAST suite of programs includes a program called formatdb that converts a text-based sequence database into a specialized format. The blastall program requires such a formatted database for the subject database when it performs a search. The “blastn” algorithm implemented in blastall, for instance, requires a formatted nucleotide database for the subject database. In order to reduce the size of the database, and as an optimization for speedier comparison of nucleotide sequence data, formatdb converts each ASCII character representing a single nucleotide (e.g. ‘A’, ‘C’, ‘G’, ‘T’, ‘U’, ‘a’, ‘c’, etc.) into a two bit value representing one of the four standard nucleotides, A, C, G or T(U). These are then packed four at a time into 8-bit bytes in a packed database file.
As a result of imperfect sequence reads from automated nucleotide sequencing equipment, incomplete or inconsistent sequence assembly, reverse translation of amino acid sequences, or other sequence generation errors or inconsistencies, the exact standard nucleotide at each position of a sequence may not be known. In this case, the text file may contain characters other than upper or lower case A, C, G, T, or U. These characters are known as ambiguity characters, and represent the possible characters at a given position in a sequence. For instance, if it is known that a given nucleotide is either an ‘A’ or a ‘C’, but not which one, the character at that position may be expressed as an ‘M’. If no information about a nucleotide's identity is known, the character at that position may be expressed as an ‘N’. Including the ambiguity characters, then, there are sixteen possible logical nucleotide representations for each nucleotide in a sequence. This exceeds the 4 possibilities that can be encoded in the two bits allocated to each nucleotide by formatdb. In order to get around this, formatdb replaces the ambiguous nucleotide with one of the four standard nucleotides, randomly chosen. The resulting packed database of standard nucleotides is then used in the actual search. The original ambiguous nucleotide characters are restored only when the final results and sequence alignments are generated.
In order to subdivide a large subject database into many smaller subject sub-databases for use in multiple blastall runs with the -z or -Y parameters, each of the sub-databases must first be processed with formatdb. The following observation is the crux of the current explanation about one cause of differences in search results: for each run of formatdb, the standard nucleotides which replace the ambiguity characters are chosen using a random number generator which depends, in part, on the position of the ambiguity character in the database. Thus, the standard nucleotides chosen at each ambiguous position of a sub-database will be largely DIFFERENT than the standard nucleotides chosen for the corresponding position in the unified database from which the sub-database was extracted. As a result, the significant matches found by the many sub-comparisons are NOT equivalent to the significant matches found when comparing a query sequence to the entire subject database in one unified blastall run. This is especially true and vexing when the subject database(s) contain many ambiguity characters.
Setting aside for a moment the previously mentioned pitfalls (i.e. resource limitations such as RAM, local disk space, and bandwidth interconnect for each CPU, inconsistency of results from subdivided searches, etc.) assume that one may use the blastall program with acceptable efficiency and accuracy, either in the naive manner, or with the -z and -Y arguments. How will the program be distributed to the individual CPUs? Are the CPUs heterogeneous? Will executables be needed for multiple architectures? How will the databases be subdivided, have formatdb run on them, and be distributed to all the CPUs? What happens if one of the subcomparisons fails? How will all the results be collected and reintegrated in a useful and efficient manner?
Currently, there is no single answer to any of these questions. Organizations are left with a range of choices—from developing their own solutions to these problems, to purchasing a commercial cluster load-balancing system, which will typically still require a significant investment in configuration and troubleshooting. While many script-based tools, such as the BioPerl toolkit, are available to perform tasks such as parsing of BLAST output, there is still a great deal of labor involved in building, deploying, and debugging user-friendly software to manage large BLAST jobs on a cluster of machines. Even commercial systems do not necessarily guarantee robustness of the programs they are running. If the blastall program fails on one of the CPUs, for whatever reason, the software managing the job needs to be told explicitly how to handle the disconnect. These are nontrivial issues that require significant manpower investment.
Assuming that these problems of robustness have been dealt with in a distributed BLAST solution using blastall, there still remains the matter of efficiency. The blastall program generates large quantities of ASCII text, which must somehow find its way from each CPU running the program to a storage unit, usually a large network mounted RAID system. The information content of the results, however, is significantly less than the size of the text generated. Few systems compress the results for transmission across the network, however, instead usually writing directly to the remote disk. Newer versions of NCBI BLAST (2.1.X) support generation of XML—encoded results, which may improve these bandwidth issues somewhat, but many production environments have yet to adopt this newer format. Computational efficiency is important as well as storage and bandwidth efficiency. Perl programs for managing and parsing these large quantities of output can be an order of magnitude slower than their (probably nonexistent) equivalent in a compiled language such as C. For these reasons, a more tightly integrated software architecture is highly desirable to maximize the efficiency of very large sequence database comparison